package com.rc.saas.tenant.service.tenant;

import com.github.pagehelper.PageInfo;
import com.rc.saas.tenant.base.BaseService;
import com.rc.saas.tenant.mapper.tenant.TenantUserMapper;
import com.rc.saas.tenant.model.tenant.OnlineUser;
import com.rc.saas.tenant.model.tenant.TenantUser;
import com.rc.saas.tenant.model.tenant.TenantUserExample;
import com.rc.saas.tenant.search.tenant.TenantUserSearch;
import com.rc.saas.tenant.vo.tenant.TenantUserVo;
import org.springframework.context.ApplicationContext;

import java.util.List;

public interface TenantUserService extends BaseService<Long, TenantUser, TenantUserExample, TenantUserMapper> {
    void createUser(TenantUser user);

    /**
     * 同时修改TenantUser表和信息表的密码
     *
     * @param user
     * @param newPassword
     */
    void updatedUserAndTenantPassword(TenantUser user, String newPassword);

    /**
     * 同时修改TenantUser表和信息表的手机号码
     *
     * @param user
     * @param newMobile
     */
    void updatedUserAndTenantMobile(TenantUser user, String newMobile);

    /**
     * 同时修改TenantUser表和信息表的手机邮箱
     *
     * @param user
     * @param newEmail
     */
    void updatedUserAndTenantEmail(TenantUser user, String newEmail);


    TenantUser findUserByExample(TenantUserExample example);

    /**
     * 通过loginName进行查询
     */
    TenantUser selectByLoginName(String loginName);

    /**
     * 通过loginName进行查询
     */
    TenantUser selectByMobile(String mobile);

    List<OnlineUser> listOnlineUser(ApplicationContext ac);

    PageInfo<TenantUser> selectUserByPage(TenantUser record, int pageNum, int pageSize);

    /**
     * 判断此登录帐号是否存在
     *
     * @param loginName
     * @return
     */
    TenantUser checkLoginNameExist(String loginName);

    /**
     * 判断此手机号是否存在
     *
     * @param phone
     * @return
     */
    TenantUser checkPhoneExist(String phone);

    /**
     * 判断此组织机构代码是否存在
     *
     * @param tenantCode
     * @return
     */
    TenantUser checkTenantCodeExist(String tenantCode);

    List<TenantUser> listTenantUserByUserType(String userType);

    PageInfo<TenantUserVo> listPageTenantUser(TenantUserSearch tenantUserSearch);

    TenantUser selectUserByMobile(Long enterpriseId, String mobile);
}
